package model;

import java.util.Date;

/**
 * Интерфейс описывающий методы класса Flights
 * @version 1.0
 * @see Flights
 */
public interface InterfaceFlights {

    /**
     * Добавление новойго рейса
     * @param newFlight Новый рейс
     * @return Сообщение о проведённой операции: успешно или возникла ошибка
     */
    void addFlight(Flight newFlight);

    /**
     * Добавление рейсов из файла
     * @param fileName Имя файла из которого будет происходить добавление рейсов
     */
    void addFlights(String fileName);

    /**
     * Поиск
     * @param flightsNumber Номер рейса
     * @param aircraft Тип самолёта
     * @param arriveTown Город прибытия
     * @param arriveAirport Аэропорт прибытия
     * @param departTown Город отправления
     * @param departArport Аэропорт отправления
     * @param departTime Время отправления
     * @return Список строк для отображения
     */
    Flights search (int flightsNumber, String aircraft, String arriveTown, String arriveAirport, 
            String departTown, String departArport, Date departTime);
    
    /**
     * Поиск по номеру рейса
     * @param flightNumber Номер рейса
     * @return Рейс
     */
    Flights searchByFlightsNumber(int flightsNumber);

    /**
     * Поиск по аэробусу
     * @param str Название аэробуса
     * @return Список рейсов удовлетворяющих условию поиска
     */
    Flights searchByAircraft(String str);

    /**
     * Поиск по городу прибытия
     * @param str Название города прибытия
     * @return Список рейсов удовлетворяющих условию поиска
     */
    Flights searchByArriveTown(String str);
    
    /**
     * Поиск по городу отправления
     * @param str Название города отправления
     * @return Список рейсов удовлетворяющих условию поиска
     */
    Flights searchByDepartTown(String str);

    /**
     * Поиск по аэропорту прибытия
     * @param str Название аэропорта прибытия
     * @return Список рейсов удовлетворяющих условию поиска
     */
    Flights searchByArriveAirport(String str);
    
    /**
     * Поиск по аэропорту отправления
     * @param str Название аэропорта отправления
     * @return Список рейсов удовлетворяющих условию поиска
     */
    Flights searchByDepartAirport(String str);

    /**
     * Поиск по времени вылета
     * @param stime время 
     * @return Список рейсов удовлетворяющих условию поиска
     */
    Flights searchByDepartTime (Date stime);
    
    /**
     * Доступ к рейсу по его индексу в общем массиве рейсов
     * @param i Индекс
     * @return Рейс
     */
    Flight getFlightByIndex(int i);
    /**
     * Удаление рейса по его номеру
     * @param flightsNumber Номер рейса
     */
    void deleteFlightByFlightsNumber(int flightsNumber);
    /**
     * Возвращает количество рейсов
     * @return Количество рейсов
     */
    int getSize();
    
    /**
    
    void updateFlight(int flightsNumber, Flight newFlight); * Изменение 
     * @param flightsNumber
     * @param newFlight 
     */
    void updateFlight(Flight newFlight);
}
